/**
* Copyright (C) 2013-2015
*
* @file   S_3_Function_doSet.c
*
* @remark
*
*/

#include "S_3_Function_doSet.h"
#include "S_3_Function_doChange.h"
#include "iid.h"

#include "gwin_global_config.h"


static void P_3_2_StrokeSetting_doSet(property_operation_t *o)
{
    // 判断数据格式是否正确，如果错误，返回代码: OPERATION_ERROR_VALUE
    if (o->value->format != PROPERTY_FORMAT_ULONG && o->value->format != PROPERTY_FORMAT_NUMBER)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // 判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE

    // TODO: 执行写操作: o->value->data.number.ulongValue;
    gwin_set_stroke_min(o->value->data.number.ulongValue);
    // 如果成功，返回代码: OPERATION_OK
    o->code = OPERATION_OK;
    
    return;
}

static void P_3_3_StrokeSettingMax_doSet(property_operation_t *o)
{
    // 判断数据格式是否正确，如果错误，返回代码: OPERATION_ERROR_VALUE
    if (o->value->format != PROPERTY_FORMAT_ULONG && o->value->format != PROPERTY_FORMAT_NUMBER)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // 判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE

    // TODO: 执行写操作: o->value->data.number.ulongValue;
    gwin_set_stroke_max(o->value->data.number.ulongValue);
    // 如果成功，返回代码: OPERATION_OK
    o->code = OPERATION_OK;
    
    return;
}

static void P_3_4_NodeModel_doSet(property_operation_t *o)
{
    // 判断数据格式是否正确，如果错误，返回代码: OPERATION_ERROR_VALUE
    if (o->value->format != PROPERTY_FORMAT_ULONG && o->value->format != PROPERTY_FORMAT_NUMBER)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // 判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE

    // 简单判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE
    if (o->value->data.number.ulongValue < 0 || o->value->data.number.ulongValue > 2)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // TODO: 执行写操作: o->value->data.number.ulongValue;
    gwin_set_node_mode(o->value->data.number.ulongValue);
    // 如果成功，返回代码: OPERATION_OK
    o->code = OPERATION_OK;
    
    return;
}

static void P_3_8_ActionType_doSet(property_operation_t *o)
{
    // 判断数据格式是否正确，如果错误，返回代码: OPERATION_ERROR_VALUE
    if (o->value->format != PROPERTY_FORMAT_ULONG && o->value->format != PROPERTY_FORMAT_NUMBER)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // 判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE

    // 简单判断数据取值范围是否合法，如果不合法，返回代码: OPERATION_ERROR_VALUE
    if (o->value->data.number.ulongValue < 1 || o->value->data.number.ulongValue > 3)
    {
        o->code = OPERATION_ERROR_VALUE;
        return;
    }

    // TODO: 执行写操作: o->value->data.number.ulongValue;

    // 如果成功，返回代码: OPERATION_OK
    o->code = OPERATION_OK;
    
    return;
}

void S_3_Function_doSet(property_operation_t *o)
{
    switch (o->piid)
    {
        case IID_3_2_StrokeSetting:
            P_3_2_StrokeSetting_doSet(o);
            break;

        case IID_3_3_StrokeSettingMax:
            P_3_3_StrokeSettingMax_doSet(o);
            break;

        case IID_3_4_NodeModel:
            P_3_4_NodeModel_doSet(o);
            break;

        case IID_3_8_ActionType:
            P_3_8_ActionType_doSet(o);
            break;

        default:
            o->code = OPERATION_ERROR_CANNOT_WRITE;
            break;
    }
}
